﻿using System.ServiceModel;
using Sinacor.Infra.Service.Security.Services;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response;
using System.Collections.Generic;

namespace Sinacor.Servico.Bovespa.Ordens.Service.ServiceContract
{
	[ExceptionShielding]
    [ServiceContract(Namespace = "http://www.bovespa.com.br/Sinacor.Servico.Bovespa.Ordens.Service.ServiceContract", SessionMode = SessionMode.Allowed)]
	public interface IPreBoleto
	{

        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))] 
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ConsultarPreBoleto")]
        List<DataContract.Response.ConsultarPreBoletoResponse> ConsultarPreBoleto(DataContract.Request.ConsultarPreBoletoRequest request);

        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))] 
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ConsultarPreBoletoAnalitico")]
        List<DataContract.Response.ConsultarPreBoletoAnaliticoResponse> ConsultarPreBoletoAnalitico(DataContract.Request.ConsultarPreBoletoAnaliticoRequest request);

        /// <summary>
        /// Operacao responsavel por realizar o casamento de pre-boletos
        /// Alteracoes:
        /// Diogo Milanez - 21/11/2007
        /// * Parametro de entrada foi removido
        /// </summary>
        /// <returns></returns>
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))] 
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "RealizarCasamentoPreBoleto")]
        [TransactionRequired]
        [OperationLog]
        DataContract.Response.RealizarCasamentoResponse RealizarCasamentoPreBoleto(DataContract.Request.RealizarCasamentoPreBoletoRequest request);
        
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))] 
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "RealizarCasamentoPreBoletoFIN")]
        [TransactionRequired]
        [OperationLog]
        DataContract.Response.RealizarCasamentoResponse RealizarCasamentoPreBoletoFIN(DataContract.Request.RealizarCasamentoPreBoletoRequest request, DataContract.Enum.TipoCasamentoPreBoleto pTipoCasamentoPreBoleto);

        /// <summary>
        /// Operacao responsavel por incluir um pre-boleto
        /// Alterações:
        /// Diogo Milanez - 21/11/2007
        /// Parametro de entrada passou a ser uma colecao
        /// </summary>
        /// <param name="request">colecao de pre-boletos para inclusao</param>
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))] 
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "IncluirPreBoleto")]
        [TransactionRequired]
        [OperationLog]
        DataContract.Response.RealizarCasamentoResponse IncluirPreBoleto(List<DataContract.Request.IncluirPreBoletoRequest> request);

        /// <summary>
        /// Operacao responsavel por alterar uma colecao de pre-boletos
        /// Alterações:
        /// Ricardo Valadão Silva - 16/04/2008
        /// * Parametro de entrada passou a ser uma colecao
        /// * Retorno passou a ser void
        /// </summary>
        /// <param name="request">colecao de pre-boletos para exclusao</param>
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))] 
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "AlterarPreBoleto")]
        [TransactionRequired]
        [OperationLog]
        DataContract.Response.RealizarCasamentoResponse AlterarPreBoleto(List<DataContract.Request.AlterarPreBoletoRequest> request);

        /// <summary>
        /// Operacao responsavel por excluir uma colecao de pre-boletos
        /// Alterações:
        /// Diogo Milanez - 21/11/2007
        /// * Parametro de entrada passou a ser uma colecao
        /// * Retorno passou a ser void
        /// </summary>
        /// <param name="request">colecao de pre-boletos para exclusao</param>
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))] 
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ExcluirPreBoleto")]
        [TransactionRequired]
        [OperationLog]
        void ExcluirPreBoleto(List<DataContract.Request.ExcluirPreBoletoRequest> request);

        /// <summary>
        /// Operacao responsavel por processar duas colecoes de pre-boleto
        /// uma de pre-boletos para exclusao e uma de pre-boletos para inclusao
        /// </summary>
        /// <param name="requestInclusao">Colecao de pre-boletos para inclusao</param>
        /// <param name="requestExclusao">Colecao de pre-boletos para exclusao</param>
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))] 
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ProcessarPreBoleto")]
        [TransactionRequired]
        [OperationLog]
        DataContract.Response.RealizarCasamentoResponse ProcessarPreBoleto(List<DataContract.Request.IncluirPreBoletoRequest> requestInclusao, List<DataContract.Request.ExcluirPreBoletoRequest> requestExclusao, List<DataContract.Request.AlterarPreBoletoRequest> requestAlteracao);

        /// <summary>
        /// Data : 07/12/2007
        /// Autor: Eduardo Sertorio
        /// Operacao responsavel por validar o acesso a tela de pre-boleto da ordem selecionada
        /// Historico:
        ///	Observacoes:  Criação da operacao
        /// 
        /// Data : 28/04/2008
        /// Autor: Eduardo Sertorio
        /// Obs. : Operacao renomeada de (ValidarDataPregaoPreBoletoOrdemMegaBolsa) para (ValidarDataPregaoPreBoletoOrdem) - esertorio - 200804281423 - ref issue ID0003686
        /// </summary>
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))] 
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ValidarDataPregaoPreBoletoOrdem")]
        void ValidarDataPregaoPreBoletoOrdem(DataContract.Request.ValidarDataPregaoPreBoletoOrdemRequest request);
    }
}
